package newsSystem.Inner.Login;
import newsSystem.Admin.AdminInfo;
import newsSystem.Admin.AdminManager;
import newsSystem.Inner.MainPage;
import newsSystem.dao.AdminInfoJDBC;
import newsSystem.img.ImagePanel;
import newsSystem.layout.AdminLayOutPage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

public class AdminLoginPage {
    private static List<AdminInfo> adminList;
    public AdminLoginPage(){
        JFrame frame = new JFrame("报刊订阅管理系统");
        frame.setSize(900, 650);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);//设置空布局，组件想怎么放怎么放
        frame.setLocationRelativeTo(null); // 居中显示

        // 创建一个 JPanel 作为内容面板
//        JPanel contentPane = new JPanel();
        // 加载背景图像
        ImageIcon backgroundImageIcon = new ImageIcon("E:\\Java\\NewsSub_Manage_System\\src\\main\\java\\newsSystem\\img\\bgc2.jpg");
        Image backgroundImage = backgroundImageIcon.getImage();

        // 创建一个 ImagePanel，并设置背景图像
        ImagePanel contentPane = new ImagePanel(backgroundImage);

//        contentPane.setBackground(Color.CYAN); // 设置背景颜色为天蓝色
        // 设置内容面板的布局管理器
        contentPane.setLayout(null); // 设置布局管理器为null

//        欢迎面板
        JPanel welpanel=new JPanel(new BorderLayout());
        welpanel.setBounds(150,80,600,100);
        welpanel.setOpaque(false);
//       welpanel.setBackground(Color.CYAN);
        JLabel welcomeLabel = new JLabel("报刊订阅管理员登录");
        // 设置字体大小为 36
        Font font = welcomeLabel.getFont();
        Font newFont = font.deriveFont(Font.BOLD, 45f);
        // 设置文字颜色为白色
        welcomeLabel.setForeground(Color.WHITE);

        welcomeLabel.setFont(newFont);
//        welcomeLabel.setBorder(new LineBorder(Color.YELLOW));
        // 添加文字到中心
        welcomeLabel.setHorizontalAlignment(SwingConstants.CENTER); // 文本水平居中
        welpanel.add(welcomeLabel,BorderLayout.CENTER);


//   管理员登录
        //按钮面板
        JPanel AdminPanel = new JPanel(); // 使用 FlowLayout 布局管理器new FlowLayout()
        AdminPanel.setOpaque(false);//设置为透明
        AdminPanel.setLayout(null); // 禁用布局管理器
        AdminPanel.setBounds(290,200,320,180);
//        LoginPanel.setBackground(Color.CYAN);
        AdminPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY));

        JLabel adminLabel = new JLabel("Adminname:");
        adminLabel.setFont(new Font("宋体", Font.PLAIN, 18));
        adminLabel.setBounds(20, 20, 100, 30); // 设置位置和大小
        JTextField adminname = new JTextField(10);
        adminname.setFont(new Font("宋体", Font.PLAIN, 18));
        adminname.setBounds(120, 20, 140, 30); // 设置位置和大小

        // 创建密码标签和密码框
        JLabel passwdLabel = new JLabel("Password:");
        passwdLabel.setFont(new Font("宋体", Font.PLAIN, 18));
        passwdLabel.setBounds(20, 60, 100, 30); // 设置位置和大小
        JPasswordField password = new JPasswordField(10);
        password.setFont(new Font("宋体", Font.PLAIN, 18));
        password.setBounds(120, 60, 140, 30); // 设置位置和大小

//       创建确认和返回按钮框
        JButton okbutton = new JButton("确定");
        JButton returnbttton = new JButton("返回");
        okbutton.setBounds(70,130,70,30);
        returnbttton.setBounds(180,130,70,30);
        okbutton.setContentAreaFilled(false);
        returnbttton.setContentAreaFilled(false);
//        用户返回按钮
        returnbttton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 在这里编写跳转到用户注册页面的逻辑
                System.out.println("返回");
//                JOptionPane.showMessageDialog(null, "跳转到用户注册页面");
                new MainPage();
                frame.setVisible(false);
//           new MainPage();
            }
        });
        okbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String adminName = adminname.getText();
                // 获取密码字符数组
                char[] passwordChars = password.getPassword();
                // 将字符数组转换为字符串
                String password = new String(passwordChars);
                // 处理密码，这里只是简单打印密码
                System.out.println("密码是：" + password);
                // 在这里进行验证
                System.out.println(validateAdmin(adminName, password));
                if (adminName.isEmpty() || passwordChars.length == 0) {
                    JOptionPane.showMessageDialog(null, "用户名或密码不能为空！", "错误", JOptionPane.ERROR_MESSAGE);
                } else if (validateAdmin(adminName, password)) {

                    // 验证成功
                    JOptionPane.showMessageDialog(null, "登录成功！");
                    // 在这里编写跳转到用户注册页面的逻辑
                    System.out.println("确定");
                    try {
                        new AdminLayOutPage();
                    } catch (Exception ex) {
                        throw new RuntimeException(ex);
                    }
                    frame.setVisible(false);
                    // 在这里执行登录成功后的逻辑
                } else {
                    // 验证失败
                    JOptionPane.showMessageDialog(null, "用户名或密码错误，请重试！", "错误", JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        AdminPanel.add(okbutton);
        AdminPanel.add(returnbttton);
        AdminPanel.add(adminLabel);
        AdminPanel.add(adminname);
        AdminPanel.add(passwdLabel);
        AdminPanel.add(password);

        // 将内容面板设置为 JFrame 的内容面板
        contentPane.add(AdminPanel);
        contentPane.add(welpanel);

        frame.setContentPane(contentPane); // 将内容面板设置为窗体的内容面板

        frame.setVisible(true);

    }
    // 验证管理员用户名和密码的方法
    private boolean validateAdmin(String adminName, String password) {
        //        调用AdminJDBC方法
        AdminInfoJDBC.adminJDBC();
        adminList= AdminManager.getAdminList();
        for (AdminInfo admin : adminList) {
            System.out.println("管理员账号: " + admin.getAdminID() + ", 管理员密码: " + admin.getPassword());
        }
        // 遍历管理员集合
        for (AdminInfo admin : adminList) {
        // 在这里进行管理员验证的逻辑，比如与数据库中的管理员信息进行比较
            System.out.println("管理员登录验证");
            System.out.println(admin.getAdminID()+admin.getPassword());
            if (admin.getAdminID().equals(adminName) && admin.getPassword().equals(password)) {
                return true; // 验证成功
            }
        }
        return false; // 验证失败
    }
    public static void main(String[] args) {
//        箭头函数
        SwingUtilities.invokeLater(() -> {
            new AdminLoginPage();
        });
    }
}
